草庐IT

带指针的 C++ vector

全部标签

c++ - 迭代器可以在 C++ 中的 vector 之间共享吗?

在c++中,如果我有两个数组a[10]和b[10],我可以引入一个索引i可以用于两个数组指向第(i+1)个元素,a[i]和b[i]。迭代器是否也可以共享,或者我需要做类似的事情:vectora;vectorb;//assumebothareinitiatedandsamevector::iteratori;//assumeprogramknowi=10and*i=20invectoravector::iteratorj=b.begin();for(;j!=b.end();j++){if(*j==*i){break;}}然后我得到迭代器j,它指向相同的位置但在vectorb中?我可以简单

c++ - 如何编写可以处理对象或指针函数调用的模板函数?

我希望能够编写一个模板函数,该函数可以对容器的所有元素调用函数。我们可以假设函数名总是相同的。然而,不知道的是容器中存放的是对象还是指针。即,我是否应该取消引用。templatevoidProcessKeyedContainer(TContainer&keyedContainer){for(autoit=keyedContainer.begin();it!=keyedContainer.end();++it){//dosomerandomstuffhere.//...autovalue=it->second;value.Process();//orvalue->Process()ift

c++ - 使用两个不同的构造函数初始化指向数组的指针

我有一个程序,我想在其中使用指针初始化一个类对象数组。classxyz{};cin>>M;xyz*a=newxyz[M];//thiswillcalltheconstructorforeachobject.问题是我在xyz类中有两个构造函数。我想使用其他构造函数初始化最后两个元素,而不是没有参数的默认构造函数。我该怎么做?我希望第M+1和第M+2项由接受参数的不同构造函数初始化。 最佳答案 std::vectora(M-2);a.push_back(xyz(...));//xyz(...)hereisacalltothea.push

c++ - 迭代中的指针算法是否溢出安全?

即使在较新的C++代码中,我也经常看到使用普通指针算法进行数组迭代。我想知道它们到底有多安全,使用它们是否是个好主意。考虑这个片段(如果你用calloc代替new,它也会在C中编译):int8_t*buffer=newint8_t[16];for(int8_t*p=buffer;p当buffer发生分配到地址0xFFFFFFF0时,这种迭代不会导致溢出并完全跳过循环吗(在32位地址空间中)或0xFFFFFFFFFFFFFFFF0(64位)?据我所知,这是一种非常不幸但仍有可能出现的情况。 最佳答案 这是安全的。C和C++标准明确允许

c++ - 在 C++ 中将字符串 vector 转换为 char 数组

我正在尝试将字符串vector转换为C++中的字符数组。更具体地说,我正在尝试做的是使用以下命令拆分一个shell命令,例如“ls–latr”:istringstreamf(x);while(getline(f,x,'')){strings.push_back(x);}我相信这会给我strings[0]=="ls"和strings[1]=="-latr"。然后我正在尝试执行以下操作:execvp(strings[0],strings);但是,我得到这个错误:error:cannotconvert‘std::basic_string,std::allocator>’to‘constcha

c++ - 如何将 C++ 函数指针(非静态成员函数)传递给预定义的 C 函数?

我正在考虑使用来自http://users.ics.forth.gr/~lourakis/levmar/的库,这是用C语言编写的。但是我将它包含在一个成员函数“dlevmar_der”中,它期望两个函数指针作为它的参数:intdlevmar_der(void(*func)(double*p,double*hx,intm,intn,void*adata),void(*jacf)(double*p,double*j,intm,intn,void*adata),double*p,/*I/O:initialparameterestimates.Onoutputcontainstheestima

c++ - 方法接受函数指针的可变参数模板

下面的代码在我看来应该可以正常工作,但它产生了C2738:couldnotdeducetemplateargumentfor'Type'.在VS2013中。templateuintGetParameterSize(ReturnType(*method)(Args...)){returnParameterSize();}templateuintParameterSize(){uintoutput=sizeof(Type);if(sizeof...(Remaining)>0){output+=ParameterSize();}returnoutput;}voidMyMethod3(inta

c++ - 通过这样的 const 指针修改非常量指针是否合法?

考虑以下函数:voidf(intconst*p){*const_cast(id(p))=0;}假设f总是得到一个int*作为参数,这是合法的吗?我不是在问这是否是一件好事,我只是想要一个严格正式的答案。让我有点担心的是,如果你能做到这一点,优化器就会更难利用常量。考虑一个更复杂的例子://identity,alwaysreturnswhatitgetsuintptr_tid(uintptr_tp){staticunsignedintconstar[5]{0x12345678,0x87654321,0x02468ACE,0xECA86420,0x88888888};for(size_ti

c++ - 从指针更改数组中的值?

我一直在研究指针以帮助更好地理解。我已将a声明为指向长度为3的整数数组的指针,并将b声明为长度为3的整数数组。然后我指向a在b。intmain(){int(*a)[3];intb[3]{2,4,6};a=&b;a[0][0]=8;//Thisprintsout8and8.std::cout要通过指针a访问b的元素,我必须像a一样执行a[0][0]数组的数组。这与使用new关键字声明指向整数数组的指针相比,我只能输出c[0]。int*c=newint[3]{2,4,6};std::cout这是为什么?非常感谢,乔治 最佳答案 Ihav

c++ - 指向虚函数的指针

所以我现在有点进退两难。我想做一个函数指针,但我想把它做成一个虚函数。不一定是虚函数本身,而是派生函数。我试着只制作指针,但函数需要是静态的。当我尝试创建静态虚函数时,编译器对我大喊大叫。我也不想使函数指针类特定,因此可以想象其他类可以使用该指针。这是我在伪代码中的意思:classC{public:virtualvoidsomething();};classB:publicC{public:voidsomething();};classD{public:voidsomething();};intmain(){void(*pointer)();Bb;Dd;pointer=b.someth